/* @author cerimice */
package Dialogos.Modulo.OrdenServicio;

import Dialogos.Modal.Entidad.Cliente.BuscarClienteDlg;
import Logica.Modulo.OrdenServicio.OrdenServicioLogica;
import Sistema.Configuracion;
import cerimice.ComboLista;
import com.vaadin.terminal.StreamResource;
import com.vaadin.terminal.ThemeResource;
import com.vaadin.ui.*;
import com.vaadin.ui.Window.Notification;
import com.vaadin.ui.themes.BaseTheme;
import java.util.logging.Logger;

public class GenerarOrdenServicioDlg extends Panel
    {
    private OrdenServicioLogica logica;
    private TextField           fechaEntrada,claveCliente,nombreCliente,telefonoFijoCliente,telefonoMovilCliente,equipoDescripcion,equipoSerie;
    private TextArea            equipoObservacion,equipoFalla;
    private ComboLista          tipoServicio,equipoMarca;
    private Button              buscarCliente,generarOrden,cancelarOrden;
    
    public GenerarOrdenServicioDlg()
        {
        agregarComponentes();
        }
    
    private void agregarComponentes()
        {
        logica = new OrdenServicioLogica();
        
        fechaEntrada            = new TextField("Fecha de Entrada",logica.getFechaEntrada());  fechaEntrada.setEnabled(false); fechaEntrada.setWidth("300px");
        tipoServicio            = new ComboLista("Tipo de Servicio");                           tipoServicio.setWidth("300px");
        
        claveCliente            = new TextField("Clave del Cliente");   claveCliente.setWidth("150px"); claveCliente.setEnabled(false);
        nombreCliente           = new TextField("Nombre del Cliente");  nombreCliente.setWidth("200px");        nombreCliente.setEnabled(false);
        telefonoFijoCliente     = new TextField("Telefono Fijo");       telefonoFijoCliente.setWidth("200px");  telefonoFijoCliente.setEnabled(false);
        telefonoMovilCliente    = new TextField("Telefono Movil");      telefonoMovilCliente.setWidth("200px"); telefonoMovilCliente.setEnabled(false);
        buscarCliente           = new Button();                         buscarCliente.setWidth("50px"); buscarCliente.setIcon(new ThemeResource("icons/personal/iconoBuscar.png")); buscarCliente.setStyleName(BaseTheme.BUTTON_LINK);
        buscarCliente.addListener(new Button.ClickListener()  {@Override public void buttonClick(Button.ClickEvent event){buscarCliente();}});
        
        equipoDescripcion       = new TextField("Descripción del Equipo");      equipoDescripcion.setWidth("300px");
        equipoMarca             = new ComboLista("Marca del Equipo");           equipoMarca.setWidth("300px");
        equipoSerie             = new TextField("Numero de serie");             equipoSerie.setWidth("300px");
        equipoObservacion       = new TextArea("Observaciones del Equipo");     equipoObservacion.setWidth("300px");
        equipoFalla             = new TextArea("Falla en el Equipo");           equipoFalla.setWidth("300px");
        
        generarOrden            = new Button();                                 generarOrden.setIcon(new ThemeResource("icons/personal/aceptar.png"));    /*generarOrden.setStyleName(BaseTheme.BUTTON_LINK);*/
        cancelarOrden           = new Button();                                 cancelarOrden.setIcon(new ThemeResource("icons/personal/cancelar.png"));  /*cancelarOrden.setStyleName(BaseTheme.BUTTON_LINK);*/
        
        generarOrden.addListener(new Button.ClickListener()     {@Override public void buttonClick(Button.ClickEvent event){generarOrden();}});
        cancelarOrden.addListener(new Button.ClickListener()    {@Override public void buttonClick(Button.ClickEvent event){limpiarOrden();}});
        
        try
            {
            tipoServicio.addListItems(logica.getListaTipoServicio());
            equipoMarca.addListItems(logica.getListaMarca());
            }
        catch(Exception ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),ex.getMessage());}
        
        VerticalLayout datosCliente = new VerticalLayout();
            datosCliente.setCaption("DATOS DEL CLIENTE");
            HorizontalLayout searchCliente = new HorizontalLayout();
                searchCliente.addComponent(claveCliente);
                searchCliente.addComponent(buscarCliente);
            datosCliente.addComponent(searchCliente);
            datosCliente.addComponent(nombreCliente);
            datosCliente.addComponent(telefonoFijoCliente);
            datosCliente.addComponent(telefonoMovilCliente);
        HorizontalLayout dataOrden = new HorizontalLayout();
            VerticalLayout datosOrden = new VerticalLayout();
                datosOrden.setCaption("DATOS ORDEN DE SERVICIO");
            VerticalLayout datosEquipo = new VerticalLayout();
                datosEquipo.setCaption("DATOS DEL EQUIPO");
                datosEquipo.addComponent(equipoDescripcion);
                datosEquipo.addComponent(equipoMarca);
                datosEquipo.addComponent(equipoSerie);
            datosOrden.addComponent(fechaEntrada);
            datosOrden.addComponent(tipoServicio);
            datosOrden.addComponent(datosEquipo);
            VerticalLayout datosEquipo2 = new VerticalLayout();
                datosEquipo2.setCaption("");
                datosEquipo2.addComponent(equipoObservacion);
                datosEquipo2.addComponent(equipoFalla);
            dataOrden.addComponent(datosOrden);
            dataOrden.addComponent(datosEquipo2);
        VerticalLayout operaciones = new VerticalLayout();
            operaciones.addComponent(generarOrden);
            operaciones.addComponent(cancelarOrden);
            operaciones.setComponentAlignment(generarOrden, Alignment.BOTTOM_CENTER);
            operaciones.setComponentAlignment(cancelarOrden, Alignment.BOTTOM_CENTER);
        HorizontalLayout principal = new HorizontalLayout();
            principal.setCaption("PROPORCIONE LOS DATOS PARA AGREGAR LA ORDEN DE SERVICIO");
            principal.addComponent(datosCliente);
            principal.addComponent(dataOrden);
            principal.addComponent(operaciones);
        this.addComponent(principal);
        this.setCaption("GENERACIÓN DE ORDENES DE SERVICIO");
        this.setIcon(new ThemeResource("icons/personal/generarOrdenServicio.png"));
        }
    
    private void buscarCliente()
        {
        getWindow().addWindow(new BuscarClienteDlg("Busqueda de Cliente",claveCliente,nombreCliente,telefonoFijoCliente,telefonoMovilCliente));
        String cliente = (String)claveCliente.getValue();
        if(cliente.equals("")){return;}
        }
    
    private void limpiarOrden()
        {
        fechaEntrada.setValue(logica.getFechaEntrada());
        claveCliente.setValue("");
        nombreCliente.setValue("");
        telefonoFijoCliente.setValue("");
        telefonoMovilCliente.setValue("");
        equipoDescripcion.setValue("");
        equipoSerie.setValue("");
        equipoObservacion.setValue("");
        equipoFalla.setValue("");
        tipoServicio.unselect(tipoServicio.getValue());
        equipoMarca.unselect(equipoMarca.getValue());
        }
    
    private void generarOrden()
        {
        try
            {
            String  fechaEntradaDts = (String)fechaEntrada.getValue();
            String  usuarioDts      = ((Dialogos.Sica.Login)this.getApplication()).getLoginData().getUsuario().getClave();
            String  clienteDts      = (String)claveCliente.getValue();
            String  servicioDts     = tipoServicio.getSelectedKey();
            String  equipoDesDts    = (String)equipoDescripcion.getValue();
            String  equipoMarcaDts  = equipoMarca.getSelectedKey();
            String  equipoSerieDts  = (String)equipoSerie.getValue();
            String  equipoObsDts    = (String)equipoObservacion.getValue();
            String  equipoFallaDts  = (String)equipoFalla.getValue();
            this.reportePDF();
            
            if(logica.agregarObjeto(fechaEntradaDts, usuarioDts, clienteDts, servicioDts, equipoDesDts, equipoMarcaDts, equipoSerieDts, equipoObsDts, equipoFallaDts))
                {
                reportePDF();
                limpiarOrden();
                }
            else
                {getWindow().showNotification("Agregar...",logica.getError(),Notification.TYPE_WARNING_MESSAGE);}
            }
        catch(NullPointerException ex)
            {getWindow().showNotification("Agregar...","Por favor verifique los siguientes datos:<br>Tipo de servico<br>Marca del equipo",Notification.TYPE_WARNING_MESSAGE);}
        catch(Exception ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),ex.getMessage());}
        }
    
    private void reportePDF()
        {
        try
            {
            Window window = new Window();
                ((VerticalLayout) window.getContent()).setSizeFull();
                window.setResizable(true);
                window.setWidth("800");
                window.setHeight("600");
                window.center();
            Embedded e = new Embedded();
                e.setSizeFull();
                e.setType(Embedded.TYPE_BROWSER);
            StreamResource resource = new StreamResource(logica.reporteGenerarOrdenServicio(), "OrdenDeServicio"+System.currentTimeMillis()+".pdf",this.getApplication());
                resource.setMIMEType("application/pdf");
                e.setSource(resource);
            window.addComponent(e);
            this.getApplication().getMainWindow().addWindow(window);
            }
        catch (Exception ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),ex.getMessage());}
        }
    }
